<!DOCTYPE html>
<html lang="en">
	<head>
		<title>Recaf - modern bytecode editor</title>
		<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
		<meta name="viewport" content="width=device-width">
		<meta name="description" content="Recaf is a modern java bytecode editor using Objectweb's ASM and JavaFX.">
		<meta name="keywords" content="java,bytecode,editor,recaf,reverse engineering">
		<link rel="icon" type="image/x-icon" href="favicon.ico"/>
		<link href="https://fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet">
		<link rel="stylesheet" href="css/style.css">
	</head>
	<body>
		<header>
			<div class="beam container-wide">
				<div class="box-left">
					<a href="index.html"><div class="logo"></div></a>
					<!--
					<div id="title">
						<h1><span class="highlight">Recaf</span>: Bytecode Editor</h1>
					</div>
					-->
				</div>
				<div class="box-right">
					<nav>
						<a href="index.html" class="current">Home</a>
						<a href="documentation.html">Documentation</a>
						<a href="features.html">Features</a>
						<a href="https://github.com/Col-E/Recaf">Github</a>
					</nav>
				</div>
			</div>
		</header>
		<section id="display">
			<div class="display-beam beam">
				<h1>Recaf</h1>
				<p>A modern bytecode editor</p>
			</div>
			<!-- Ease of access download button -->
			<a id="dl-link"><div id="download"></div></a>
			<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
			<script language="javascript" type="text/javascript">
			function setup() {
				var btn = $("#download");
				// Don't bother on mobile layout
				if (!btn.is(":visible")) {
					// Don't allow resizing the viewport to show the button.
					btn.css("display", "none");
					return;
				}
				// For desktop viewports, setup download button.
				$.getJSON("https://api.github.com/repos/Col-E/Recaf/releases/latest").done(function (json) {
					// Setup button text
					var tagName = json.tag_name;
					var btntxt = "<p>Download Recaf-" + tagName + "</p>";
					btn.html(btntxt);
					// Setup link URL
					var downloadURL = json.assets[0].browser_download_url;
					$("#dl-link").attr("href", downloadURL);
			   }); 
			}
			setup();
			</script>
		</section>
		<section id="content">
			<h3>What is Recaf?</h3>
			<p>Recaf is an open-source Java bytecode editor built on top of <a href="https://asm.ow2.io/">Objectweb's ASM</a>. ASM is a bytecode manipulation library that abstracts away the constant pool and a few other class-file attributes. Since keeping track of the constant pool and managing proper stackframes are no longer necessary, complex changes can be made with relative ease. With additional features to assist in the process of editing classes, Recaf is the most feature rich free bytecode editor available.</p>
			<h3>Useful Information</h3>
			<p>While ASM makes bytecode manipulation very simple it does not mean you should dive head-first into editing compiled java programs without understanding some basic programming concepts and the Java class file architecture. Here are some references for these topics:</p>
			<ul>
				<li><a href="https://docs.oracle.com/javase/specs/jvms/se12/html/jvms-4.html">Specification: Chapter 4. The class File Format</a></li>
				<li><a href="https://blog.takipi.com/jvm-architecture-101-get-to-know-your-virtual-machine/">JVM Architecture 101: Get to Know Your Virtual Machine</a></li>
				<li>Java opcodes:
				<ul>
					<li><a href="opcodes.html">Simplified ASM set</a></li>
					<li><a href="https://docs.oracle.com/javase/specs/jvms/se12/html/jvms-6.html">Standard set</a></li>
				</ul>
				</li>
			</ul>
			<h3>Download &amp; Building</h3>
			<p>Downloadable jar binaries are provided through Github's <a href="https://github.com/Col-E/Recaf/releases">release page</a>.</p>
			<p>Alternatively you can build from the source by cloning <i>(or downloading)</i> the repository and using maven to build the executable.</p>
			<h3>Requirements</h3>
			<p>Recaf requires Java 8 to run. To use a few of the features you will need the JDK rather than the JRE. For running on Java 9 and above please read the usage guide for how to do that. Editing capabilities are independent from the version of java you use to run Recaf.</p>
			<h3>Usage Guide &amp; More Information</h3>
			<ul>
				<li><a href="documentation.html">Usage guide</a></li>
				<li><a href="features.html">Feature table</a></li>
			</ul>	
			<h3>Contact &amp; Support</h3>
			<p>For reporting bugs and suggesting new features please use the github repo's <a href="https://github.com/Col-E/Recaf/issues">issue page</a> and submit a new issue. For other inquiries join the discord server here: <a href="https://discord.gg/Bya5HaA">discord.gg/Bya5HaA</a></p>
		</section>
		<footer>
			<p class="faint"><b>Note:</b> Site best viewed with up-to-date browsers.</p>
		</footer>
	</body>
</html>